Let's import the necessary libraries.
# import the needed packages
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
import matplotlib.image as img
import tensorflow.keras as keras
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
from random import choice
from random import uniform
from numpy.random import randint
from statistics import mean
# Load the TensorBoard notebook extension
%load_ext tensorboard
from tensorflow.keras.models import Sequential, Model, load_model
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization, Activation
from tensorflow.keras import optimizers
from tensorflow.keras.optimizers import RMSprop
The tensorboard extension is already loaded. To reload it, use: %reload_ext tensorboard
#train, validation and test directories
training_dir = 'C:/Users/MAK/Downloads/bird-species-classification-main/bird-species-classification-main/dataset/train'
validation_dir = 'C:/Users/MAK/Downloads/bird-species-classification-main/bird-species-classification-main/dataset/valid'
test_dir = 'C:/Users/MAK/Downloads/bird-species-classification-main/bird-species-classification-main/dataset/test'
Let's start by importing the training and validation datasets.
train_datagen = ImageDataGenerator(rescale=1/255)
validation_datagen = ImageDataGenerator(rescale=1/255)
test_datagen = ImageDataGenerator(rescale=1/255)
def generate_datasets(bs, train_datag):
train_generator = train_datag.flow_from_directory(
training_dir,
target_size = (224,224),
color_mode = 'rgb',
class_mode = 'sparse',
batch_size = bs)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size = (224,224),
color_mode = 'rgb',
class_mode = 'sparse',
batch_size = bs)
test_generator = validation_datagen.flow_from_directory(
test_dir,
target_size = (224,224),
color_mode = 'rgb',
class_mode = 'sparse',
batch_size = bs)
return train_generator, validation_generator, test_generator
Let's now analyze the training dataset.
train_generator, validation_generator, test_generator = generate_datasets(16, train_datagen)
Found 35215 images belonging to 250 classes. Found 1250 images belonging to 250 classes. Found 1250 images belonging to 250 classes.
#map indexes in classes names
class_mapping = {v:k for k,v in train_generator.class_indices.items()}
from matplotlib import cm
from mpl_toolkits.axes_grid1 import ImageGrid
import math
%matplotlib inline
#function from: https://expoundai.wordpress.com/2019/04/24/image-data-generators-in-keras/
def show_grid(image_list, nrows, ncols, label_list = None, show_labels = False, savename = None, figsize = (10,10), showaxis = 'off'):
if type(image_list) is not list:
if(image_list.shape[-1] == 1):
image_list = [image_list[i, :, :, 0] for i in range(image_list.shape[0])]
elif(image_list.shape[-1] == 3):
image_list = [image_list[i, :, :, :] for i in range(image_list.shape[0])]
fig = plt.figure(None, figsize, frameon = False)
grid = ImageGrid(fig, 111, # similar to subplot(111)
nrows_ncols = (nrows, ncols), # creates 2x2 grid of axes
axes_pad = 0.3, # pad between axes in inch.
share_all = True,
)
for i in range(nrows * ncols):
ax = grid[i]
ax.imshow(image_list[i], cmap='Greys_r') # The AxesGrid object work as a list of axes.
ax.axis('off')
if show_labels:
ax.set_title(class_mapping[y[i]])
if savename != None:
plt.savefig(savename, bbox_inches = 'tight')
for i in range(4):
x, y = train_generator.next()
show_grid(x, 2, 8, label_list = y, show_labels = True, figsize = (20,10))
The analyze_dataset function builds a graph that analyzes the number of images of each class in the dataset passed as a parameter.
def analyze_dataset(train_gen):
#count the number of images of each class
unique, counts = np.unique(train_gen.classes, return_counts=True)
d = dict(zip(unique, counts))
#print(d)
print("Classe with less images: ", min(d.items(), key=lambda x: x[1] ))
print("Classe with more images: ", max(d.items(), key=lambda x: x[1] ))
print("Mean of images: ", mean(d[k] for k in d))
#presenting the number of images of each class in a plot
plt.figure(figsize=(20, 5))
plt.bar(d.keys(), d.values(), width = 1.2, color = ['paleturquoise', 'yellow', 'orange'])
plt.xlabel('Classes')
plt.ylabel('Number of images per class')
plt.show()
analyze_dataset(train_generator)
Classe with less images: (194, 95) Classe with more images: (210, 300) Mean of images: 140
train_datagen_aug = ImageDataGenerator(rescale=1/255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2)
train_generator_aug, _, _ = generate_datasets(16, train_datagen_aug)
Found 35215 images belonging to 250 classes. Found 1250 images belonging to 250 classes. Found 1250 images belonging to 250 classes.
This model consists of a first approach to the problem.
import datetime
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, BatchNormalization
start = datetime.datetime.now()
# Example values for the function parameters
n_layers = 2
bs = 32
op = 'adam'
ep = 10
# Example directory paths to training and validation data
training_dir = 'C:/Users/MAK/Downloads/bird-species-classification-main/bird-species-classification-main/dataset/train'
validation_dir = 'C:/Users/MAK/Downloads/bird-species-classification-main/bird-species-classification-main/dataset/valid'
# Initialize ImageDataGenerator for training and validation data
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
validation_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
# Flow training images in batches of 32 using train_datagen generator
train_generator = train_datagen.flow_from_directory(
training_dir,
target_size=(224, 224),
batch_size=bs,
class_mode='categorical')
# Flow validation images in batches of 32 using validation_datagen generator
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(224, 224),
batch_size=bs,
class_mode='categorical')
def CNN_model(n_layers, bs, op, ep, train_generator, validation_generator):
model = tf.keras.models.Sequential([
Conv2D(128, (3,3), activation='relu', input_shape=(224, 224, 3)),
MaxPooling2D(2, 2),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(32, (3,3), activation='relu'),
MaxPooling2D(2,2),
BatchNormalization(momentum=0.9),
Conv2D(16, (3,3), activation='relu'),
MaxPooling2D(2,2),
Flatten()
])
# Dense layers
for i in range(n_layers):
model.add(Dense(512, activation='relu'))
model.add(Dense(250, activation='softmax'))
model.summary()
# Compile
model.compile(loss='categorical_crossentropy',
optimizer= op,
metrics=['acc'])
# Fit
history = model.fit_generator(
train_generator,
steps_per_epoch=8,
epochs= ep,
verbose=1,
validation_data = validation_generator,
validation_steps = 8
)
model.save('model.h5')
return model, history
# Run the function with example values
trained_model, training_history = CNN_model(n_layers, bs, op, ep, train_generator, validation_generator)
end = datetime.datetime.now()
print("Total time taken: ", end-start)
#CNN_model(2, 32, "adam", 50)
Found 35215 images belonging to 250 classes. Found 1250 images belonging to 250 classes. Model: "sequential_7" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_35 (Conv2D) (None, 222, 222, 128) 3584 _________________________________________________________________ max_pooling2d_35 (MaxPooling (None, 111, 111, 128) 0 _________________________________________________________________ conv2d_36 (Conv2D) (None, 109, 109, 128) 147584 _________________________________________________________________ max_pooling2d_36 (MaxPooling (None, 54, 54, 128) 0 _________________________________________________________________ conv2d_37 (Conv2D) (None, 52, 52, 64) 73792 _________________________________________________________________ max_pooling2d_37 (MaxPooling (None, 26, 26, 64) 0 _________________________________________________________________ conv2d_38 (Conv2D) (None, 24, 24, 32) 18464 _________________________________________________________________ max_pooling2d_38 (MaxPooling (None, 12, 12, 32) 0 _________________________________________________________________ batch_normalization_7 (Batch (None, 12, 12, 32) 128 _________________________________________________________________ conv2d_39 (Conv2D) (None, 10, 10, 16) 4624 _________________________________________________________________ max_pooling2d_39 (MaxPooling (None, 5, 5, 16) 0 _________________________________________________________________ flatten_7 (Flatten) (None, 400) 0 _________________________________________________________________ dense_21 (Dense) (None, 512) 205312 _________________________________________________________________ dense_22 (Dense) (None, 512) 262656 _________________________________________________________________ dense_23 (Dense) (None, 250) 128250 ================================================================= Total params: 844,394 Trainable params: 844,330 Non-trainable params: 64 _________________________________________________________________ Epoch 1/10 8/8 [==============================] - 5s 565ms/step - loss: 5.5963 - acc: 0.0078 - val_loss: 5.5046 - val_acc: 0.0117 Epoch 2/10 8/8 [==============================] - 4s 477ms/step - loss: 5.5649 - acc: 0.0000e+00 - val_loss: 5.5362 - val_acc: 0.0078 Epoch 3/10 8/8 [==============================] - 4s 473ms/step - loss: 5.5713 - acc: 0.0039 - val_loss: 5.5268 - val_acc: 0.0000e+00 Epoch 4/10 8/8 [==============================] - 4s 481ms/step - loss: 5.5187 - acc: 0.0117 - val_loss: 5.5166 - val_acc: 0.0039 Epoch 5/10 8/8 [==============================] - 4s 475ms/step - loss: 5.5049 - acc: 0.0039 - val_loss: 5.5245 - val_acc: 0.0039 Epoch 6/10 8/8 [==============================] - 4s 462ms/step - loss: 5.4842 - acc: 0.0156 - val_loss: 5.5002 - val_acc: 0.0039 Epoch 7/10 8/8 [==============================] - 4s 466ms/step - loss: 5.4994 - acc: 0.0000e+00 - val_loss: 5.5066 - val_acc: 0.0117 Epoch 8/10 8/8 [==============================] - 4s 465ms/step - loss: 5.5004 - acc: 0.0195 - val_loss: 5.4869 - val_acc: 0.0117 Epoch 9/10 8/8 [==============================] - 4s 463ms/step - loss: 5.4633 - acc: 0.0156 - val_loss: 5.4141 - val_acc: 0.0156 Epoch 10/10 8/8 [==============================] - 4s 461ms/step - loss: 5.4548 - acc: 0.0117 - val_loss: 5.4195 - val_acc: 0.0000e+00 Total time taken: 0:00:41.902702
Let's now train the model.
The plot_metrics function, defined below, creates graphs relating to the values of the metrics to be analyzed.
def plot_metrics(history):
# summarize history for accuracy
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
In order to automate the process of optimizing the hyperparameters of a CNN model, whether developed from scratch or using transfer learning, a genetic algorithm was defined.
Each chromosome will take into account the hyperparameters that are intended to be evaluated in the network. Namely, the learning rate, the optimization function used and the learning rate value.
To select the best model, we will only use 5 epochs for each one.
#list of the possible values for each chromosome
lr_values = [0.1, 0.01, 0.001, 0.0001]
op_values = ["adamax", "adadelta", "adam", "adagrad", "sgd"]
bs_values = [8, 16, 32]
activ_values = ['elu', 'relu', 'tanh']
'''
Function that defines a chromosome
'''
def create_individual():
parameters = {}
lr = choice(lr_values)
parameters["lr"] = lr
bs = choice(bs_values)
parameters["bs"] = bs
activ = choice(activ_values)
parameters["activ"] = activ
op = choice(op_values)
parameters["op"] = op
#ep = randint(50, 100)
#parameters["ep"] = ep
return parameters
'''
Function responsible for generating the population
'''
def generate_population(n):
population = []
for i in range(n):
chromosome = create_individual()
population.append(chromosome)
return population
'''
Fitness function based on accuracy and loss
'''
def fitness_evaluation(history):
acc = max(history.history['accuracy'])
loss = max(history.history['loss'])
print("ACC ", acc)
print("LOSS ", loss)
return 0.8 * acc - 0.2 * loss
'''
Selection function based on the roulette wheel method (from: https://github.com/KrishnaManmayi/Hyper-Parameter-Optimization-of-CNN-using-genetic-algorithm/blob/main/Optimization_using_genetic_algorithm_Cifar10_using_CNN.ipynb)
'''
# Roulette wheel selection method
def selection(population_fitness):
total = sum(population_fitness)
percentage = [round((x/total) * 100) for x in population_fitness]
selection_wheel = []
for pop_index,num in enumerate(percentage):
selection_wheel.extend([pop_index]*num)
parent1_ind = choice(selection_wheel)
parent2_ind = choice(selection_wheel)
return [parent1_ind, parent2_ind]
'''
Function responsible for crossover. Random select gene from one of the two parents
'''
def crossover(parent1, parent2):
child1 = {}
child2 = {}
child1["lr"] = choice([parent1["lr"], parent2["lr"]])
child2["lr"] = choice([parent1["lr"], parent2["lr"]])
child1["bs"] = choice([parent1["bs"], parent2["bs"]])
child2["bs"] = choice([parent1["bs"], parent2["bs"]])
child1["op"] = parent2["op"]
child2["op"] = parent1["op"]
child1["activ"] = parent1["activ"]
child2["activ"] = parent2["activ"]
return [child1, child2]
'''
Function responsible for mutation that swaps a random gene of a chromosome
'''
def mutation(chromosome):
#select random gene to mutate
m = randint(0,4)
if m == 0:
chromosome["lr"] = choice([x for x in lr_values if x != chromosome['lr']])
elif m == 1:
chromosome["op"] = choice([x for x in op_values if x != chromosome['op']])
elif m == 2:
chromosome["activ"] = choice([x for x in activ_values if x != chromosome['activ']])
elif m == 3:
chromosome["bs"] = choice([x for x in bs_values if x != chromosome['bs']])
return chromosome
import datetime
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.applications import ResNet101V2
# Define the ResNet101V2_model function
def ResNet101V2_model(n_layers, activation, optimizer, learning_rate, epochs):
# Load the ResNet101V2 model without the top (fully connected) layers
base_model = ResNet101V2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# Freeze the convolutional base
base_model.trainable = False
# Create a new model on top
model = tf.keras.Sequential([
base_model,
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(1024, activation=activation),
tf.keras.layers.Dense(512, activation=activation),
tf.keras.layers.Dense(250, activation='softmax') # Output layer with 250 units and softmax activation
])
# Compile the model
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
# Example values for the function parameters
n_layers = 2
activation = 'relu'
optimizer = 'adam'
learning_rate = 0.001
epochs = 1
# Call the ResNet101V2_model function
model = ResNet101V2_model(n_layers, activation, optimizer, learning_rate, epochs)
# Call the ResNet101V2_model function to get the model
model = ResNet101V2_model(8, 'elu', 'adam', 0.001, 1)
# Fit the model to obtain the training history
history = model.fit(train_generator, validation_data=validation_generator, epochs=epochs)
# Evaluate the model's performance or do any other post-training operations
acc = fitness_evaluation(history)
1101/1101 [==============================] - 465s 415ms/step - loss: 1.2584 - accuracy: 0.6943 - val_loss: 0.4704 - val_accuracy: 0.8544 ACC 0.6943348050117493 LOSS 1.2583703994750977
print(history.history)
acc = fitness_evaluation(history)
plot_metrics(history)
{'loss': [1.2583703994750977], 'accuracy': [0.6943348050117493], 'val_loss': [0.47042959928512573], 'val_accuracy': [0.8543999791145325]}
ACC 0.6943348050117493
LOSS 1.2583703994750977
import datetime
start = datetime.datetime.now()
num_classes = 250
def VGG16_model(op):
# loading the weights of VGG16 without the top layer. These weights are trained on Imagenet dataset.
vgg = tf.keras.applications.VGG16(input_shape = IMAGE_SIZE + [3], weights = 'imagenet', include_top = False) # input_shape = (64,64,3) as required by VGG
# this will exclude the initial layers from training phase as there are already been trained.
for layer in vgg.layers:
layer.trainable = False
x = Flatten()(vgg.output)
#x = Dense(128, activation = 'relu')(x) # we can add a new fully connected layer but it will increase the execution time.
x = Dense(num_classes, activation = 'softmax')(x) # adding the output layer with softmax function as this is a multi label classification problem.
model = Model(inputs = vgg.input, outputs = x)
model.compile(loss='categorical_crossentropy', optimizer= op, metrics=['accuracy'])
end= datetime.datetime.now()
elapsed= end-start
print ('Time: ', elapsed)
model.summary()
Model: "sequential_10" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= resnet101v2 (Functional) (None, 7, 7, 2048) 42626560 _________________________________________________________________ global_average_pooling2d_2 ( (None, 2048) 0 _________________________________________________________________ dense_30 (Dense) (None, 1024) 2098176 _________________________________________________________________ dense_31 (Dense) (None, 512) 524800 _________________________________________________________________ dense_32 (Dense) (None, 250) 128250 ================================================================= Total params: 45,377,786 Trainable params: 2,751,226 Non-trainable params: 42,626,560 _________________________________________________________________
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, TensorBoard
from datetime import datetime
from tensorflow.keras.applications import resnet50
def ResNet50_model(op, ep):
es = EarlyStopping(monitor='val_loss', patience=5)
mc = ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', save_best_only=True)
start = datetime.now()
conv_model = resnet50.ResNet50(weights='imagenet', include_top=False, input_shape=(224,224,3))
for layer in conv_model.layers:
layer.trainable = False
x = keras.layers.Flatten()(conv_model.output)
x = keras.layers.Dense(100, activation='relu')(x)
x = keras.layers.Dense(100, activation='relu')(x)
x = keras.layers.Dense(100, activation='relu')(x)
predictions = keras.layers.Dense(250, activation='softmax')(x)
full_model = keras.models.Model(inputs=conv_model.input, outputs=predictions)
full_model.summary()
full_model.compile(loss='categorical_crossentropy',
optimizer= op,
metrics=['acc'])
history = full_model.fit_generator(
train_generator,
callbacks = [es, mc],
validation_data = validation_generator,
workers=10,
epochs = ep,
)
end= datetime.now()
elapsed= end-start
print ('Time: ', elapsed)
return full_model, history
model, history = ResNet50_model("adam", 5)
Model: "model_1"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_55 (InputLayer) [(None, 224, 224, 3) 0
__________________________________________________________________________________________________
conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_55[0][0]
__________________________________________________________________________________________________
conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0]
__________________________________________________________________________________________________
conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0]
__________________________________________________________________________________________________
conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0]
__________________________________________________________________________________________________
pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0]
__________________________________________________________________________________________________
pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0]
__________________________________________________________________________________________________
conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0]
__________________________________________________________________________________________________
conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0]
__________________________________________________________________________________________________
conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0]
conv2_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0]
__________________________________________________________________________________________________
conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0]
__________________________________________________________________________________________________
conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0]
conv2_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0]
__________________________________________________________________________________________________
conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0]
__________________________________________________________________________________________________
conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0]
conv2_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0]
__________________________________________________________________________________________________
conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0]
__________________________________________________________________________________________________
conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0]
__________________________________________________________________________________________________
conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0]
conv3_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0]
__________________________________________________________________________________________________
conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0]
__________________________________________________________________________________________________
conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0]
conv3_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0]
__________________________________________________________________________________________________
conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0]
__________________________________________________________________________________________________
conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0]
conv3_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0]
__________________________________________________________________________________________________
conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0]
__________________________________________________________________________________________________
conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0]
conv3_block4_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0]
__________________________________________________________________________________________________
conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0]
__________________________________________________________________________________________________
conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0]
__________________________________________________________________________________________________
conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0]
conv4_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0]
__________________________________________________________________________________________________
conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0]
__________________________________________________________________________________________________
conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0]
conv4_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0]
__________________________________________________________________________________________________
conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0]
__________________________________________________________________________________________________
conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0]
conv4_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0]
__________________________________________________________________________________________________
conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0]
__________________________________________________________________________________________________
conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0]
conv4_block4_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0]
__________________________________________________________________________________________________
conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0]
__________________________________________________________________________________________________
conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0]
conv4_block5_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0]
__________________________________________________________________________________________________
conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0]
__________________________________________________________________________________________________
conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0]
conv4_block6_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0]
__________________________________________________________________________________________________
conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0]
__________________________________________________________________________________________________
conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0]
__________________________________________________________________________________________________
conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0]
conv5_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0]
__________________________________________________________________________________________________
conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0]
__________________________________________________________________________________________________
conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0]
conv5_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0]
__________________________________________________________________________________________________
conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0]
__________________________________________________________________________________________________
conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0]
conv5_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0]
__________________________________________________________________________________________________
flatten_9 (Flatten) (None, 100352) 0 conv5_block3_out[0][0]
__________________________________________________________________________________________________
dense_184 (Dense) (None, 100) 10035300 flatten_9[0][0]
__________________________________________________________________________________________________
dense_185 (Dense) (None, 100) 10100 dense_184[0][0]
__________________________________________________________________________________________________
dense_186 (Dense) (None, 100) 10100 dense_185[0][0]
__________________________________________________________________________________________________
dense_187 (Dense) (None, 250) 25250 dense_186[0][0]
==================================================================================================
Total params: 33,668,462
Trainable params: 10,080,750
Non-trainable params: 23,587,712
__________________________________________________________________________________________________
Epoch 1/5
1101/1101 [==============================] - 106s 93ms/step - loss: 5.5202 - acc: 0.0073 - val_loss: 5.5325 - val_acc: 0.0040
Epoch 2/5
1101/1101 [==============================] - 101s 92ms/step - loss: 5.5066 - acc: 0.0085 - val_loss: 5.5341 - val_acc: 0.0040
Epoch 3/5
1101/1101 [==============================] - 100s 91ms/step - loss: 5.5054 - acc: 0.0085 - val_loss: 5.5361 - val_acc: 0.0040
Epoch 4/5
1101/1101 [==============================] - 100s 91ms/step - loss: 5.5052 - acc: 0.0085 - val_loss: 5.5375 - val_acc: 0.0040
Epoch 5/5
1101/1101 [==============================] - 100s 91ms/step - loss: 5.5050 - acc: 0.0085 - val_loss: 5.5400 - val_acc: 0.0040
Time: 0:08:31.358101
for layers in (model.layers)[:19]:
print(layers)
layers.trainable = False
<keras.engine.input_layer.InputLayer object at 0x000001B5387C86C8> <keras.layers.convolutional.ZeroPadding2D object at 0x000001B927A80F08> <keras.layers.convolutional.Conv2D object at 0x000001B927C130C8> <keras.layers.normalization.batch_normalization.BatchNormalization object at 0x000001B927749BC8> <keras.layers.core.Activation object at 0x000001B927E91588> <keras.layers.convolutional.ZeroPadding2D object at 0x000001B92885A608> <keras.layers.pooling.MaxPooling2D object at 0x000001B92884F908> <keras.layers.convolutional.Conv2D object at 0x000001B928B1DF08> <keras.layers.normalization.batch_normalization.BatchNormalization object at 0x000001B928B1D048> <keras.layers.core.Activation object at 0x000001B928B35788> <keras.layers.convolutional.Conv2D object at 0x000001B928B0A688> <keras.layers.normalization.batch_normalization.BatchNormalization object at 0x000001B928B3BF08> <keras.layers.core.Activation object at 0x000001B928B3CC88> <keras.layers.convolutional.Conv2D object at 0x000001B927B98108> <keras.layers.convolutional.Conv2D object at 0x000001B928B0DEC8> <keras.layers.normalization.batch_normalization.BatchNormalization object at 0x000001B928668688> <keras.layers.normalization.batch_normalization.BatchNormalization object at 0x000001B928B285C8> <keras.layers.merge.Add object at 0x000001B928A56548> <keras.layers.core.Activation object at 0x000001B928A408C8>
X= model.layers[-2].output
predictions = Dense(2, activation="softmax")(X)
model_final = Model(model.input, predictions)
model_final.compile(loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer = optimizers.SGD(lr=0.0001, momentum=0.9), metrics=["accuracy"])
c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\optimizer_v2\optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead. "The `lr` argument is deprecated, use `learning_rate` instead.")
model_final.summary()
Model: "model_2"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_55 (InputLayer) [(None, 224, 224, 3) 0
__________________________________________________________________________________________________
conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_55[0][0]
__________________________________________________________________________________________________
conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0]
__________________________________________________________________________________________________
conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0]
__________________________________________________________________________________________________
conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0]
__________________________________________________________________________________________________
pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0]
__________________________________________________________________________________________________
pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0]
__________________________________________________________________________________________________
conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0]
__________________________________________________________________________________________________
conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0]
__________________________________________________________________________________________________
conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0]
conv2_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0]
__________________________________________________________________________________________________
conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0]
__________________________________________________________________________________________________
conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0]
conv2_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0]
__________________________________________________________________________________________________
conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0]
__________________________________________________________________________________________________
conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0]
conv2_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0]
__________________________________________________________________________________________________
conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0]
__________________________________________________________________________________________________
conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0]
__________________________________________________________________________________________________
conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0]
conv3_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0]
__________________________________________________________________________________________________
conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0]
__________________________________________________________________________________________________
conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0]
conv3_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0]
__________________________________________________________________________________________________
conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0]
__________________________________________________________________________________________________
conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0]
conv3_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0]
__________________________________________________________________________________________________
conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0]
__________________________________________________________________________________________________
conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0]
__________________________________________________________________________________________________
conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0]
__________________________________________________________________________________________________
conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0]
__________________________________________________________________________________________________
conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0]
__________________________________________________________________________________________________
conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0]
__________________________________________________________________________________________________
conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0]
__________________________________________________________________________________________________
conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0]
__________________________________________________________________________________________________
conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0]
conv3_block4_3_bn[0][0]
__________________________________________________________________________________________________
conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0]
__________________________________________________________________________________________________
conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0]
__________________________________________________________________________________________________
conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0]
__________________________________________________________________________________________________
conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0]
conv4_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0]
__________________________________________________________________________________________________
conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0]
__________________________________________________________________________________________________
conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0]
conv4_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0]
__________________________________________________________________________________________________
conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0]
__________________________________________________________________________________________________
conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0]
conv4_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0]
__________________________________________________________________________________________________
conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0]
__________________________________________________________________________________________________
conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0]
conv4_block4_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0]
__________________________________________________________________________________________________
conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0]
__________________________________________________________________________________________________
conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0]
conv4_block5_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0]
__________________________________________________________________________________________________
conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0]
__________________________________________________________________________________________________
conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0]
__________________________________________________________________________________________________
conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0]
__________________________________________________________________________________________________
conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0]
__________________________________________________________________________________________________
conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0]
__________________________________________________________________________________________________
conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0]
__________________________________________________________________________________________________
conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0]
__________________________________________________________________________________________________
conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0]
__________________________________________________________________________________________________
conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0]
conv4_block6_3_bn[0][0]
__________________________________________________________________________________________________
conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0]
__________________________________________________________________________________________________
conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0]
__________________________________________________________________________________________________
conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0]
__________________________________________________________________________________________________
conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0]
__________________________________________________________________________________________________
conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0]
__________________________________________________________________________________________________
conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0]
__________________________________________________________________________________________________
conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0]
__________________________________________________________________________________________________
conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0]
__________________________________________________________________________________________________
conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0]
conv5_block1_3_bn[0][0]
__________________________________________________________________________________________________
conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0]
__________________________________________________________________________________________________
conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0]
__________________________________________________________________________________________________
conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0]
__________________________________________________________________________________________________
conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0]
__________________________________________________________________________________________________
conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0]
__________________________________________________________________________________________________
conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0]
__________________________________________________________________________________________________
conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0]
__________________________________________________________________________________________________
conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0]
__________________________________________________________________________________________________
conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0]
__________________________________________________________________________________________________
conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0]
conv5_block2_3_bn[0][0]
__________________________________________________________________________________________________
conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0]
__________________________________________________________________________________________________
conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0]
__________________________________________________________________________________________________
conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0]
__________________________________________________________________________________________________
conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0]
__________________________________________________________________________________________________
conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0]
__________________________________________________________________________________________________
conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0]
__________________________________________________________________________________________________
conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0]
__________________________________________________________________________________________________
conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0]
__________________________________________________________________________________________________
conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0]
__________________________________________________________________________________________________
conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0]
conv5_block3_3_bn[0][0]
__________________________________________________________________________________________________
conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0]
__________________________________________________________________________________________________
flatten_9 (Flatten) (None, 100352) 0 conv5_block3_out[0][0]
__________________________________________________________________________________________________
dense_184 (Dense) (None, 100) 10035300 flatten_9[0][0]
__________________________________________________________________________________________________
dense_185 (Dense) (None, 100) 10100 dense_184[0][0]
__________________________________________________________________________________________________
dense_186 (Dense) (None, 100) 10100 dense_185[0][0]
__________________________________________________________________________________________________
dense_188 (Dense) (None, 2) 202 dense_186[0][0]
==================================================================================================
Total params: 33,643,414
Trainable params: 10,055,702
Non-trainable params: 23,587,712
__________________________________________________________________________________________________
import tensorflow as tf
from tensorflow.keras.layers import Dense, Dropout, Flatten, BatchNormalization, Activation
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.applications import ResNet101V2
def ResNet101V2_model(bs, activ, op, lr_value, ep):
train_gen, validation_gen, test_gen = generate_datasets(bs, train_datagen)
es = EarlyStopping(monitor='val_loss', patience=5)
mc = ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', save_best_only=True)
convlayer = ResNet101V2(input_shape=(224, 224, 3), weights='imagenet', include_top=False)
for layer in convlayer.layers:
layer.trainable = False
model = tf.keras.models.Sequential()
model.add(convlayer)
model.add(Dropout(0.5))
model.add(Flatten())
model.add(BatchNormalization())
model.add(Dense(2048, kernel_initializer='he_uniform'))
model.add(BatchNormalization())
model.add(Activation(activ)) # Using Activation layer here
model.add(Dropout(0.5))
model.add(Dense(1024, kernel_initializer='he_uniform'))
model.add(BatchNormalization())
model.add(Activation(activ)) # Using Activation layer here
model.add(Dropout(0.5))
model.add(Dense(250, activation='softmax')) # Corrected the activation argument
if op == "adam":
opt = tf.keras.optimizers.Adam(lr=lr_value)
elif op == 'sgd':
opt = tf.keras.optimizers.SGD(lr=lr_value)
elif op == 'adagrad':
opt = tf.keras.optimizers.Adagrad(lr=lr_value)
elif op == 'adadelta':
opt = tf.keras.optimizers.Adadelta(lr=lr_value)
elif op == 'rmsprop':
opt = tf.keras.optimizers.RMSprop(lr=lr_value)
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer=opt)
history = model.fit(train_gen, callbacks=[es, mc], validation_data=validation_gen, epochs=ep)
return model, history
opt=tf.keras.optimizers.Adam(lr=0.001)
model.compile(loss='categorical_crossentropy',metrics=['accuracy'],optimizer=opt)
history=model.fit(train_generator, validation_data = validation_generator,epochs = 3)
Epoch 1/3 1101/1101 [==============================] - 329s 299ms/step - loss: 5.5047 - accuracy: 0.0085 - val_loss: 5.5385 - val_accuracy: 0.0040 Epoch 2/3 1101/1101 [==============================] - 345s 314ms/step - loss: 5.5045 - accuracy: 0.0085 - val_loss: 5.5356 - val_accuracy: 0.0040 Epoch 3/3 1101/1101 [==============================] - 352s 320ms/step - loss: 5.5044 - accuracy: 0.0085 - val_loss: 5.5395 - val_accuracy: 0.0040
opt=tf.keras.optimizers.RMSprop(lr=0.0001)
model.compile(loss='categorical_crossentropy',metrics=['accuracy'],optimizer=opt)
history_1=model.fit(train_generator,validation_data=validation_generator,
epochs=1)
1101/1101 [==============================] - 345s 311ms/step - loss: 5.5026 - accuracy: 0.0085 - val_loss: 5.5396 - val_accuracy: 0.0040
model, history = ResNet101V2_model(8, 'tanh', 'adagrad', 0.01, 3)
acc = fitness_evaluation(history)
model.save("best_model.h5")
Found 35215 images belonging to 250 classes. Found 1250 images belonging to 250 classes. Found 1250 images belonging to 250 classes.
c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\optimizer_v2\optimizer_v2.py:356: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead. "The `lr` argument is deprecated, use `learning_rate` instead.")
Epoch 1/3
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_3084\128759963.py in <module> ----> 1 model, history = ResNet101V2_model(8, 'tanh', 'adagrad', 0.01, 3) 2 acc = fitness_evaluation(history) 3 model.save("best_model.h5") ~\AppData\Local\Temp\ipykernel_3084\1768978274.py in ResNet101V2_model(bs, activ, op, lr_value, ep) 42 model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer=opt) 43 ---> 44 history = model.fit(train_gen, callbacks=[es, mc], validation_data=validation_gen, epochs=ep) 45 46 return model, history c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing) 1182 _r=1): 1183 callbacks.on_train_batch_begin(step) -> 1184 tmp_logs = self.train_function(iterator) 1185 if data_handler.should_sync: 1186 context.async_wait() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in __call__(self, *args, **kwds) 883 884 with OptionalXlaContext(self._jit_compile): --> 885 result = self._call(*args, **kwds) 886 887 new_tracing_count = self.experimental_get_tracing_count() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds) 931 # This is the first call of __call__, so we have to initialize. 932 initializers = [] --> 933 self._initialize(args, kwds, add_initializers_to=initializers) 934 finally: 935 # At this point we know that the initialization is complete (or less c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _initialize(self, args, kwds, add_initializers_to) 758 self._concrete_stateful_fn = ( 759 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access --> 760 *args, **kwds)) 761 762 def invalid_creator_scope(*unused_args, **unused_kwds): c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs) 3064 args, kwargs = None, None 3065 with self._lock: -> 3066 graph_function, _ = self._maybe_define_function(args, kwargs) 3067 return graph_function 3068 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs) 3461 3462 self._function_cache.missed.add(call_context_key) -> 3463 graph_function = self._create_graph_function(args, kwargs) 3464 self._function_cache.primary[cache_key] = graph_function 3465 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes) 3306 arg_names=arg_names, 3307 override_flat_arg_shapes=override_flat_arg_shapes, -> 3308 capture_by_value=self._capture_by_value), 3309 self._function_attributes, 3310 function_spec=self.function_spec, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes, acd_record_initial_resource_uses) 1005 _, original_func = tf_decorator.unwrap(python_func) 1006 -> 1007 func_outputs = python_func(*func_args, **func_kwargs) 1008 1009 # invariant: `func_outputs` contains only Tensors, CompositeTensors, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds) 666 # the function a weak reference to itself to avoid a reference cycle. 667 with OptionalXlaContext(compile_with_xla): --> 668 out = weak_wrapped_fn().__wrapped__(*args, **kwds) 669 return out 670 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs) 992 except Exception as e: # pylint:disable=broad-except 993 if hasattr(e, "ag_error_metadata"): --> 994 raise e.ag_error_metadata.to_exception(e) 995 else: 996 raise ValueError: in user code: c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:853 train_function * return step_function(self, iterator) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:842 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1286 run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2849 call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3632 _call_for_each_replica return fn(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:835 run_step ** outputs = model.train_step(data) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:789 train_step y, y_pred, sample_weight, regularization_losses=self.losses) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\compile_utils.py:201 __call__ loss_value = loss_obj(y_t, y_p, sample_weight=sw) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:141 __call__ losses = call_fn(y_true, y_pred) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:245 call ** return ag_fn(y_true, y_pred, **self._fn_kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:1666 categorical_crossentropy y_true, y_pred, from_logits=from_logits, axis=axis) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\backend.py:4839 categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1161 assert_is_compatible_with raise ValueError("Shapes %s and %s are incompatible" % (self, other)) ValueError: Shapes (None, 1) and (None, 250) are incompatible
acc = fitness_evaluation(history)
model.save("best_model.h5")
ACC 0.008519097231328487 LOSS 5.504709243774414
c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\utils\generic_utils.py:497: CustomMaskWarning: Custom mask layers require a config and must override get_config. When loading, the custom mask layer must be passed to the custom_objects argument. category=CustomMaskWarning)
Let's now evaluate the performance of the final selected model, with the test dataset.
lr = 0.1
bs = 16
activ = 'tanh'
op = 'adadelta'
ep = 5
model, history = ResNet101V2_model(bs, activ, op, lr, ep)
Found 35215 images belonging to 250 classes. Found 1250 images belonging to 250 classes. Found 1250 images belonging to 250 classes. Model: "sequential_63" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= resnet101v2 (Functional) (None, 7, 7, 2048) 42626560 _________________________________________________________________ dropout_9 (Dropout) (None, 7, 7, 2048) 0 _________________________________________________________________ flatten_13 (Flatten) (None, 100352) 0 _________________________________________________________________ batch_normalization_17 (Batc (None, 100352) 401408 _________________________________________________________________ dense_198 (Dense) (None, 2048) 205522944 _________________________________________________________________ batch_normalization_18 (Batc (None, 2048) 8192 _________________________________________________________________ activation_6 (Activation) (None, 2048) 0 _________________________________________________________________ dropout_10 (Dropout) (None, 2048) 0 _________________________________________________________________ dense_199 (Dense) (None, 1024) 2098176 _________________________________________________________________ batch_normalization_19 (Batc (None, 1024) 4096 _________________________________________________________________ activation_7 (Activation) (None, 1024) 0 _________________________________________________________________ dropout_11 (Dropout) (None, 1024) 0 _________________________________________________________________ dense_200 (Dense) (None, 250) 256250 ================================================================= Total params: 250,917,626 Trainable params: 208,084,218 Non-trainable params: 42,833,408 _________________________________________________________________ None Epoch 1/5
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_3084\3610624396.py in <module> 5 ep = 5 6 ----> 7 model, history = ResNet101V2_model(bs, activ, op, lr, ep) ~\AppData\Local\Temp\ipykernel_3084\1976849179.py in ResNet101V2_model(bs, activ, op, lr_value, ep) 46 47 history = model.fit(train_gen, callbacks = [es, mc], validation_data = validation_gen, ---> 48 epochs = ep) 49 50 return model, history c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing) 1182 _r=1): 1183 callbacks.on_train_batch_begin(step) -> 1184 tmp_logs = self.train_function(iterator) 1185 if data_handler.should_sync: 1186 context.async_wait() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in __call__(self, *args, **kwds) 883 884 with OptionalXlaContext(self._jit_compile): --> 885 result = self._call(*args, **kwds) 886 887 new_tracing_count = self.experimental_get_tracing_count() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds) 931 # This is the first call of __call__, so we have to initialize. 932 initializers = [] --> 933 self._initialize(args, kwds, add_initializers_to=initializers) 934 finally: 935 # At this point we know that the initialization is complete (or less c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _initialize(self, args, kwds, add_initializers_to) 758 self._concrete_stateful_fn = ( 759 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access --> 760 *args, **kwds)) 761 762 def invalid_creator_scope(*unused_args, **unused_kwds): c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs) 3064 args, kwargs = None, None 3065 with self._lock: -> 3066 graph_function, _ = self._maybe_define_function(args, kwargs) 3067 return graph_function 3068 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs) 3461 3462 self._function_cache.missed.add(call_context_key) -> 3463 graph_function = self._create_graph_function(args, kwargs) 3464 self._function_cache.primary[cache_key] = graph_function 3465 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes) 3306 arg_names=arg_names, 3307 override_flat_arg_shapes=override_flat_arg_shapes, -> 3308 capture_by_value=self._capture_by_value), 3309 self._function_attributes, 3310 function_spec=self.function_spec, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes, acd_record_initial_resource_uses) 1005 _, original_func = tf_decorator.unwrap(python_func) 1006 -> 1007 func_outputs = python_func(*func_args, **func_kwargs) 1008 1009 # invariant: `func_outputs` contains only Tensors, CompositeTensors, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds) 666 # the function a weak reference to itself to avoid a reference cycle. 667 with OptionalXlaContext(compile_with_xla): --> 668 out = weak_wrapped_fn().__wrapped__(*args, **kwds) 669 return out 670 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs) 992 except Exception as e: # pylint:disable=broad-except 993 if hasattr(e, "ag_error_metadata"): --> 994 raise e.ag_error_metadata.to_exception(e) 995 else: 996 raise ValueError: in user code: c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:853 train_function * return step_function(self, iterator) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:842 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1286 run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2849 call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3632 _call_for_each_replica return fn(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:835 run_step ** outputs = model.train_step(data) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:789 train_step y, y_pred, sample_weight, regularization_losses=self.losses) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\compile_utils.py:201 __call__ loss_value = loss_obj(y_t, y_p, sample_weight=sw) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:141 __call__ losses = call_fn(y_true, y_pred) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:245 call ** return ag_fn(y_true, y_pred, **self._fn_kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:1666 categorical_crossentropy y_true, y_pred, from_logits=from_logits, axis=axis) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\backend.py:4839 categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1161 assert_is_compatible_with raise ValueError("Shapes %s and %s are incompatible" % (self, other)) ValueError: Shapes (None, 1) and (None, 250) are incompatible
fit = fitness_evaluation(history)
plot_metrics(history)
model.save('best_model.h5')
ACC 0.008519097231328487 LOSS 5.504709243774414
final_model = load_model('best_model.h5')
results = final_model.evaluate(test_generator)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_3084\3312936406.py in <module> ----> 1 results = final_model.evaluate(test_generator) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py in evaluate(self, x, y, batch_size, verbose, sample_weight, steps, callbacks, max_queue_size, workers, use_multiprocessing, return_dict, **kwargs) 1499 with tf.profiler.experimental.Trace('test', step_num=step, _r=1): 1500 callbacks.on_test_batch_begin(step) -> 1501 tmp_logs = self.test_function(iterator) 1502 if data_handler.should_sync: 1503 context.async_wait() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in __call__(self, *args, **kwds) 883 884 with OptionalXlaContext(self._jit_compile): --> 885 result = self._call(*args, **kwds) 886 887 new_tracing_count = self.experimental_get_tracing_count() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds) 931 # This is the first call of __call__, so we have to initialize. 932 initializers = [] --> 933 self._initialize(args, kwds, add_initializers_to=initializers) 934 finally: 935 # At this point we know that the initialization is complete (or less c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _initialize(self, args, kwds, add_initializers_to) 758 self._concrete_stateful_fn = ( 759 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access --> 760 *args, **kwds)) 761 762 def invalid_creator_scope(*unused_args, **unused_kwds): c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs) 3064 args, kwargs = None, None 3065 with self._lock: -> 3066 graph_function, _ = self._maybe_define_function(args, kwargs) 3067 return graph_function 3068 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs) 3461 3462 self._function_cache.missed.add(call_context_key) -> 3463 graph_function = self._create_graph_function(args, kwargs) 3464 self._function_cache.primary[cache_key] = graph_function 3465 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes) 3306 arg_names=arg_names, 3307 override_flat_arg_shapes=override_flat_arg_shapes, -> 3308 capture_by_value=self._capture_by_value), 3309 self._function_attributes, 3310 function_spec=self.function_spec, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes, acd_record_initial_resource_uses) 1005 _, original_func = tf_decorator.unwrap(python_func) 1006 -> 1007 func_outputs = python_func(*func_args, **func_kwargs) 1008 1009 # invariant: `func_outputs` contains only Tensors, CompositeTensors, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds) 666 # the function a weak reference to itself to avoid a reference cycle. 667 with OptionalXlaContext(compile_with_xla): --> 668 out = weak_wrapped_fn().__wrapped__(*args, **kwds) 669 return out 670 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs) 992 except Exception as e: # pylint:disable=broad-except 993 if hasattr(e, "ag_error_metadata"): --> 994 raise e.ag_error_metadata.to_exception(e) 995 else: 996 raise ValueError: in user code: c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1330 test_function * return step_function(self, iterator) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1320 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1286 run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2849 call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3632 _call_for_each_replica return fn(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1313 run_step ** outputs = model.test_step(data) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1270 test_step y, y_pred, sample_weight, regularization_losses=self.losses) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\compile_utils.py:201 __call__ loss_value = loss_obj(y_t, y_p, sample_weight=sw) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:141 __call__ losses = call_fn(y_true, y_pred) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:245 call ** return ag_fn(y_true, y_pred, **self._fn_kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:1666 categorical_crossentropy y_true, y_pred, from_logits=from_logits, axis=axis) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\backend.py:4839 categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1161 assert_is_compatible_with raise ValueError("Shapes %s and %s are incompatible" % (self, other)) ValueError: Shapes (None, 1) and (None, 250) are incompatible
#print(results)
print(test_generator.classes)
[ 0 0 0 ... 249 249 249]
Let's now try to make some predictions from the images in the test dataset and then analyze the data against those predictions.
predictions = final_model.predict(test_generator, batch_size = 16)
predicted_classes = np.argmax(predictions, axis = 1)
true_classes = test_generator.classes
class_labels = list(test_generator.class_indices.keys())
print(true_classes)
print(predicted_classes)
[ 0 0 0 ... 249 249 249] [210 210 210 ... 210 210 210]
y_pred_gen = np.array([np.argmax(x) for x in predicted_classes])
y_pred_gen = y_pred_gen[:,np.newaxis]
x_train = train_generator.classes
y_train = test_generator.labels
Y_train_argmax = np.array([np.argmax(x) for x in y_train]).reshape(-1)
from sklearn.metrics import confusion_matrix
cm_gen = confusion_matrix(true_classes, predicted_classes)
print(cm_gen)
[[0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] ... [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0]]
import seaborn as sns
plt.figure(figsize = (50, 50))
sns.heatmap(cm_gen, annot = True)
plt.xlabel('Predicted Class',fontweight = 'bold')
plt.ylabel('Actual Class',fontweight = 'bold')
plt.title('Heat Map for Genetic CNN Architecture')
Text(0.5, 1.0, 'Heat Map for Genetic CNN Architecture')
print(history)
<keras.callbacks.History object at 0x000001B860634DC8>
class_pred_acc = []
for i in range(250):
class_pred_acc.append(int((cm_gen[i][i]/10) * 100))
plt.figure(figsize=(30, 5))
sns.barplot(x= list(range(250)), y = class_pred_acc)
plt.ylabel('Classification Accuracy %')
plt.xlabel('Bird Label')
plt.title('Percentage Classification Accuracy - Genetic CNN')
Text(0.5, 1.0, 'Percentage Classification Accuracy - Genetic CNN')
model.evaluate(test_generator, use_multiprocessing = True, workers = 10)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_3084\4002429505.py in <module> ----> 1 model.evaluate(test_generator, use_multiprocessing = True, workers = 10) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py in evaluate(self, x, y, batch_size, verbose, sample_weight, steps, callbacks, max_queue_size, workers, use_multiprocessing, return_dict, **kwargs) 1499 with tf.profiler.experimental.Trace('test', step_num=step, _r=1): 1500 callbacks.on_test_batch_begin(step) -> 1501 tmp_logs = self.test_function(iterator) 1502 if data_handler.should_sync: 1503 context.async_wait() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in __call__(self, *args, **kwds) 883 884 with OptionalXlaContext(self._jit_compile): --> 885 result = self._call(*args, **kwds) 886 887 new_tracing_count = self.experimental_get_tracing_count() c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds) 922 # In this case we have not created variables on the first call. So we can 923 # run the first trace but we should fail if variables are created. --> 924 results = self._stateful_fn(*args, **kwds) 925 if self._created_variables and not ALLOW_DYNAMIC_VARIABLE_CREATION: 926 raise ValueError("Creating variables on a non-first call to a function" c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in __call__(self, *args, **kwargs) 3036 with self._lock: 3037 (graph_function, -> 3038 filtered_flat_args) = self._maybe_define_function(args, kwargs) 3039 return graph_function._call_flat( 3040 filtered_flat_args, captured_inputs=graph_function.captured_inputs) # pylint: disable=protected-access c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs) 3458 call_context_key in self._function_cache.missed): 3459 return self._define_function_with_shape_relaxation( -> 3460 args, kwargs, flat_args, filtered_flat_args, cache_key_context) 3461 3462 self._function_cache.missed.add(call_context_key) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _define_function_with_shape_relaxation(self, args, kwargs, flat_args, filtered_flat_args, cache_key_context) 3380 3381 graph_function = self._create_graph_function( -> 3382 args, kwargs, override_flat_arg_shapes=relaxed_arg_shapes) 3383 self._function_cache.arg_relaxed[rank_only_cache_key] = graph_function 3384 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes) 3306 arg_names=arg_names, 3307 override_flat_arg_shapes=override_flat_arg_shapes, -> 3308 capture_by_value=self._capture_by_value), 3309 self._function_attributes, 3310 function_spec=self.function_spec, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes, acd_record_initial_resource_uses) 1005 _, original_func = tf_decorator.unwrap(python_func) 1006 -> 1007 func_outputs = python_func(*func_args, **func_kwargs) 1008 1009 # invariant: `func_outputs` contains only Tensors, CompositeTensors, c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds) 666 # the function a weak reference to itself to avoid a reference cycle. 667 with OptionalXlaContext(compile_with_xla): --> 668 out = weak_wrapped_fn().__wrapped__(*args, **kwds) 669 return out 670 c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs) 992 except Exception as e: # pylint:disable=broad-except 993 if hasattr(e, "ag_error_metadata"): --> 994 raise e.ag_error_metadata.to_exception(e) 995 else: 996 raise ValueError: in user code: c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1330 test_function * return step_function(self, iterator) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1320 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1286 run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2849 call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3632 _call_for_each_replica return fn(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1313 run_step ** outputs = model.test_step(data) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\training.py:1270 test_step y, y_pred, sample_weight, regularization_losses=self.losses) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\engine\compile_utils.py:201 __call__ loss_value = loss_obj(y_t, y_p, sample_weight=sw) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:141 __call__ losses = call_fn(y_true, y_pred) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:245 call ** return ag_fn(y_true, y_pred, **self._fn_kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\losses.py:1666 categorical_crossentropy y_true, y_pred, from_logits=from_logits, axis=axis) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\util\dispatch.py:206 wrapper return target(*args, **kwargs) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\keras\backend.py:4839 categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) c:\Users\MAK\anaconda3\envs\myenv\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1161 assert_is_compatible_with raise ValueError("Shapes %s and %s are incompatible" % (self, other)) ValueError: Shapes (None, 1) and (None, 250) are incompatible
Bibliographic references
https://www.pyimagesearch.com/2018/05/07/multi-label-classification-with-keras/
https://medium.com/@1297rohit/transfer-learning-from-scratch-using-keras-339834b153b9
Loss_Scarce_Categorical: https://stackoverflow.com/questions/63600431/model-fit-typeerror-nonetype-object-is-not-callable
https://www.kaggle.com/pankul/image-classification-w-vgg16-weights